package windbell.domain.risk;

import edu.fudan.langlab.domain.document.IDocument;
import edu.fudan.langlab.domain.document.IDocumentContainer;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import windbell.domain.risk.RiskCheck;
import windbell.domain.risk.RiskCheckItemQrCode;
import windbell.domain.risk.RiskCheckItemStatus;
import windbell.domain.risk.RiskCheckTemplateItem;
import windbell.domain.risk.RiskReport;
import windbell.domain.risk.impl.RiskCheckItemImpl;
import windbell.domain.risk.proxy.RiskCheckItemProxy;

@EntityImplementation(implementBy = RiskCheckItemImpl.class)
public interface RiskCheckItem extends IModelObject, IDocumentContainer {
  public abstract RiskCheck getRiskCheck();
  
  public abstract Collection<RiskReport> getReports();
  
  public abstract RiskReport createAndAddtoReports();
  
  public abstract RiskReport createAndAddtoReports(final Procedure1<RiskReport> updater);
  
  public abstract RiskCheckItem removeFromReports(final RiskReport riskReport);
  
  public abstract RiskCheckItem removeAllReports();
  
  public abstract Collection<RiskCheckItemQrCode> getDocuments();
  
  public abstract RiskCheckItemQrCode createAndAddtoDocuments();
  
  public abstract RiskCheckItemQrCode createAndAddtoDocuments(final Procedure1<RiskCheckItemQrCode> updater);
  
  public abstract RiskCheckItem removeFromDocuments(final RiskCheckItemQrCode riskCheckItemQrCode);
  
  public abstract RiskCheckItem removeAllDocuments();
  
  public abstract RiskCheckTemplateItem getCheckItem();
  
  public abstract RiskCheckItem setCheckItem(final RiskCheckTemplateItem checkItem);
  
  public abstract String getComment();
  
  public abstract RiskCheckItem setComment(final String comment);
  
  public abstract RiskCheckItemStatus getStatus();
  
  public abstract void start();
  
  public abstract void publish();
  
  public abstract void startAudit();
  
  public abstract RiskReport createReport(final Procedure1<? super RiskReport> init);
  
  public abstract IDocument createDocument(final Procedure1<? super IDocument> init);
  
  public abstract void removeDocument(final IDocument document);
  
  public abstract void deleteReport(final RiskReport report);
  
  public abstract void finish(final String comment);
  
  public abstract Boolean isCreated();
  
  public abstract Boolean isChecking();
  
  public abstract Boolean isRiskProcessing();
  
  public abstract Boolean isFinished();
  
  public abstract RiskCheckItemProxy toProxy();
}
